int a[2][2]={1,2,3,4};哪么*a代表什么意思?

来源:百度知道 编辑:UC知道 时间:2024/06/23 02:30:12
如果是a[0][0],为什么
main()
{ int a[2][2]={1,2,3,4},*p=a;
printf("%d",*a);
getch();
}
输出不是1

这涉及到二维指针的概念。由于a是一个二数组,所以它是一个二维指针,此时,*a相当于a的低一维的数组名,这里*a即是二维数组第一行{1,2}的数组名,严格来讲,它不表示某一个元素的值,但由于C对指针的检查并不严格,程序可以运行通过,也可以在不同维指针间相互赋值(如上面的*p=a,p是一维整型指针,而a是二维整型指针,类型不同却可以相互赋值),但往往会有一些莫名其妙的结果产生,而且这样的问题的探讨是没有意义的,因为它本身是一种不规范。因此建议使用C++对C程序进行编译,因为C++中对指针有更为严格的检查。

对于本段程序,指针变量a和p表示的都是a[0][0]的地址,*p表示的确是a[0][0],*a不表示a[0][0]。不建议这使用。

楼主,你写错了把
应该是*p=a[2];把
你上面写的可以运行吗

对于数组名,实际它就相当于是一个
指针而已,它是存储数组首地址的
即它是指向数组的第一个元素的

代*的符号是指针的意思,*a就是指针指向了数组a的首地址即a[0][0]!

应该改为*p吧,p是指针啊,a是数组啊
*p就是1了

说类不对
别上板砖

学完指针就知道了